-- CampM
-- Create by chendh
-- 阵营模块

module("CampM", package.seeall);

-- 所有的阵营配置信息
local campTable = {};

-- 存储petid-->campId映射表
local pet2CampTable = {};

-- 载入配置表
local _init = false;
local loadCsv = function()
    if _init then return end
    _init = true;

    -- 转换下audio信息表
    local camp_CSV = get_camp_CSV();
    for i = 1, #camp_CSV do
        campTable[camp_CSV[i].id] = camp_CSV[i];
    end

    -- 初始化英雄ID和阵营ID对应关系
    for id, info in pairs(campTable) do
        for _, petId in pairs(info.pets) do
            pet2CampTable[petId] = id;
        end
    end

    camp_CSV = {};
end

-- 模块初始化
function init()
    loadCsv();
end

-- 检索阵营信息
function query(id, path)
    local m = campTable[id]

    if not m or path == "" or not path then
        return m
    end

    return m[path]
end

-- 获取自己拥有某阵营宠物
function getCampMyPet(campId)
    local myPets = ME.user.pets;
    local campPets = {};

    for _, pet in pairs(myPets) do
        if getPetCamp(pet.classId) == campId then
            table.insert(campPets, pet);
        end
    end

    return campPets;
end

-- 获取同阵营的宠物id
function getCampPets(id)
    local tempPets;
    local campId = getPetCamp(id);

    -- 先复制下，避免修改了配置表的数据
    tempPets = clone(campTable[campId]["pets"]);
    local pets = {};
    for i = 1, #tempPets do
        -- 过滤掉未开放的
        if not PetM.isHidden(tempPets[i]) then
            table.insert(pets, tempPets[i]);
        end
    end

    for j = 1, #pets do
        if pets[j] == id then
            -- 交换后返回
            local temp = pets[j];
            pets[j] = pets[1];
            pets[1] = temp;

            return pets;
        end
    end

    return {};
end

-- 获取宠物所属的阵营
function getPetCamp(id)
    if pet2CampTable[id] then
        return pet2CampTable[id];
    end

    return -1
end

-- 获取阵营数量
function getCampsCount()
    return #campTable;
end

-- 获取拥有的某阵营的宠物ID
function getCampMyPetIds(campId)
    local myPetIds = table.keys(ME.user.pets);
    local campPetIds = {};

    for _, id in pairs(myPetIds) do
        if getPetCamp(id) == campId then
            table.insert(campPetIds, id);
        end
    end

    return campPetIds;
end
